package cz.vse.adventura.po1715.xburj54_bursa.hra;

import cz.vse.adventura.po1715.xburj54_bursa.hra.APříkaz;
import cz.pecinovsky.english.pojj.adv_framework.game_txt.IPlace;
import java.util.Collection;


/*******************************************************************************
 * Instance třídy {@code PříkazJdi} představuje příkaz
 * k přesunu z aktuální mistosti do zadané místnosti. Aby byl příkaz proveden,
 * musí byt zadaná místnost z aktuální místnosti dosažitelná.
 *
 * @author Jan Bursa
 * @version 1.02,  16.12.2010
 */
public class PříkazJdi extends APříkaz
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Použije se, pokud není zadaná místnost pro přesun. */
    private static final String NEPROVEDENO =
            "Akce nebyla provedena. Nebyla zadána místnost, do níž se má přejít.";

    /** Použije se, pokud se do zadané místnosti nedá přejít. */
    private static final String NELZE =
            "Do zadané místnosti se odsud nedá přejít.";

    /** Přesun do místnosti. */
    private static final String PRESUN =
            "Přesunul(a) jste se do místnosti: ";

    /** Místnost, která je v průběhu hry nastavována. */
    private static final String PREDSIN = "Předsíň";


//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří instanci mající na strosti reakci na příkaz <b>jdi</b>,
     * po jehož zadaní se hráč přesune do místnosti,
     * jejíž název bude uveden za příkazem.
     */
    public PříkazJdi()
    {
        super( "Jdi",
               "Přesune hráče do zadané místnosti. Tato místnost musí být dostupná z aktuální místnosti." );
    }


//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Přesune hráče do zadané cílové místnosti;
     * před tím však zkontroluje, zda byla zadána cílová místnost a
     * zda je do ní možno se v daném okamžiku z aktuální místnosti přesunout.
     *
     * @param parametry Místnost, kam se hráč chce přesunout
     * @return Text zpravy vypsane po provedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length == 0) {
            return NEPROVEDENO;     //==========>
        }
        Místnost aktuální = Místnost.getAktuálníMístnost();
        Collection<? extends IPlace> sousedé = aktuální.getNeighbors();
        Místnost cil = Místnost.getMístnost(parametry[0]);
        if ((cil == null) || (! sousedé.contains(cil))) {
            return NELZE;           //==========>
        }
        Místnost.setAktuálníMístnost(cil);
            return PRESUN + cil;        //==========>
    }

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PříkazJdi x = new PříkazJdi();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
